home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / -seriously_amiga- / shareware / programming / e / easyplugins / source / simplegauge.e < prev    next >
Text File  |  1997-12-06  |  7KB  |  278 lines

  1. /*
  2. **
  3. ** simplegauge PLUGIN
  4. **
  5. ** Copyright: Ralph Wermke of Digital Innovations
  6. ** EMail    : wermke@gryps1.rz.uni-greifswald.de
  7. ** WWW      : http://www.user.fh-stralsund.de/~rwermke/di.html
  8. **
  9. ** Version  : 1.1.2
  10. ** Date     : 05-Nov-1997
  11. **
  12. ** ProgramID: 0002
  13. **
  14. ** History:
  15. **    03-Sep-1997:          V1.0 beta
  16. **       first beta release
  17. **    01-Nov-1997:          V1.1
  18. **       some minor changes
  19. **       new tags added
  20. **          PLA_SimpleGauge_BackgroundPen [ISG]
  21. **          PLA_SimpleGauge_BarPen        [ISG]
  22. **    05-Nov-1997:          V1.1.1
  23. **       enforcer hits removed
  24. **    15-Nov-1997:          V1.1.2
  25. **       object name changed to simplegauge_plugin
  26. **
  27. **
  28. */
  29.  
  30. OPT OSVERSION=37
  31. OPT PREPROCESS
  32. OPT MODULE
  33.  
  34. ->#define lite_version
  35.  
  36. #ifdef lite_version
  37.    MODULE 'tools/EasyGUI_lite'
  38. #endif
  39.  
  40. #ifndef lite_version
  41.    MODULE 'tools/EasyGUI'
  42. #endif
  43.  
  44. MODULE 'tools/textlen','tools/ghost',
  45.        'graphics/text','graphics/rastport',
  46.        'intuition/intuition','intuition/screens',
  47.        'utility/tagitem','utility'
  48.  
  49.  
  50. EXPORT OBJECT simplegauge_plugin OF plugin
  51. PRIVATE
  52.    current
  53.    percent
  54.    oldvalue
  55.    max
  56.    horizontal
  57.    showtext
  58.    disabled
  59.  
  60.    shinepen
  61.    shadowpen
  62.    fillpen
  63.    backpen
  64.  
  65.    ta          : PTR TO textattr
  66. ENDOBJECT
  67.  
  68. -> TAG_USER  | PROG_ID<<16 | TAG_VALUE
  69. -> $80000000 |   $0002<<16 | 0...
  70.  
  71. EXPORT ENUM  PLA_SimpleGauge_Max=$80020001,
  72.              PLA_SimpleGauge_Current,
  73.              PLA_SimpleGauge_Horizontal,
  74.              PLA_SimpleGauge_Percent,
  75.              PLA_SimpleGauge_ShowText,
  76.              PLA_SimpleGauge_Disabled,
  77.              PLA_SimpleGauge_BackgroundPen,
  78.              PLA_SimpleGauge_BarPen
  79.  
  80.  
  81. ->-- Constructor/ Destructor ---------------------------------
  82.  
  83. ->>> simplegauge::simplegauge (Constructor)
  84. PROC simplegauge(tags:PTR TO tagitem) OF simplegauge_plugin
  85.  
  86.    self.gh:=0     -> because it's not initialized
  87.                   -> I need it to avoid drawing before gui is open
  88.  
  89.    IF utilitybase:=OpenLibrary('utility.library', 37)
  90.  
  91.       self.max       :=Max(1,GetTagData(PLA_SimpleGauge_Max, 100, tags))
  92.       self.current   :=self.set(PLA_SimpleGauge_Current, GetTagData(PLA_SimpleGauge_Current, 0, tags))
  93.       self.horizontal:=GetTagData(PLA_SimpleGauge_Horizontal, TRUE, tags)
  94.       self.showtext  :=GetTagData(PLA_SimpleGauge_ShowText, FALSE, tags)
  95.       self.disabled  :=GetTagData(PLA_SimpleGauge_Disabled, FALSE, tags)
  96.  
  97.       self.fillpen   :=GetTagData(PLA_SimpleGauge_BarPen, -1, tags)
  98.       self.backpen   :=GetTagData(PLA_SimpleGauge_BackgroundPen, -1, tags)
  99.  
  100.       -> initial settings
  101.       self.oldvalue  :=0
  102.       self.shinepen  :=2
  103.       self.shadowpen :=1
  104.  
  105.       CloseLibrary(utilitybase)
  106.    ELSE
  107.       Raise("UTIL")
  108.    ENDIF
  109.  
  110. ENDPROC
  111. -><<
  112.  
  113. ->-- overridden methods --------------------------------------
  114.  
  115. ->>> simplegauge::will_resize
  116. PROC will_resize() OF simplegauge_plugin IS IF self.horizontal THEN RESIZEX ELSE RESIZEY
  117. -><<
  118.  
  119. ->>> simplegauge::min_size
  120. PROC min_size(ta:PTR TO textattr, fh) OF simplegauge_plugin
  121. DEF x
  122.    x:=IF self.showtext THEN textlen('100%', ta)+4 ELSE fh+6
  123. ENDPROC x,fh+6
  124. -><<
  125.  
  126. ->>> simplegauge::render
  127. PROC render(ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF simplegauge_plugin
  128. DEF oldwin, dri:PTR TO drawinfo
  129.  
  130.    self.ta :=ta
  131.  
  132.    IF dri:=GetScreenDrawInfo(win.wscreen)
  133.       self.shinepen :=dri.pens[SHINEPEN]
  134.       self.shadowpen:=dri.pens[SHADOWPEN]
  135.       IF self.fillpen=-1 THEN self.fillpen:=dri.pens[FILLPEN]
  136.       IF self.backpen=-1 THEN self.backpen:=dri.pens[BACKGROUNDPEN]
  137.       FreeScreenDrawInfo(win.wscreen, dri)
  138.    ENDIF
  139.  
  140.    oldwin:=self.gh.wnd  /* at this time wnd is 0 but it may change in a later version of easygui */
  141.    self.gh.wnd:=win
  142.    self.draw(TRUE)      /* full redraw */
  143.    self.gh.wnd:=oldwin
  144.  
  145. ENDPROC
  146. -><<
  147.  
  148. ->>> simplegauge::draw
  149. /* draws the full register */
  150. PROC draw(redraw=FALSE) OF simplegauge_plugin
  151. DEF rp:REG, left, top, right, bottom, width, height, lenght:REG, pixels,
  152.     str[6]:STRING, itext:PTR TO intuitext, textx, texty
  153.  
  154.    IF self.gh=0 THEN RETURN      /* ignore draw before gui is open */
  155.    IF self.gh.wnd=0 THEN RETURN  /* ignore draw when window is closed */
  156.  
  157.    rp    :=self.gh.wnd.rport
  158.    left  :=self.x
  159.    top   :=self.y
  160.    width :=self.xs
  161.    height:=self.ys
  162.    right :=left+width-1
  163.    bottom:=top+height-1
  164.  
  165.    IF redraw
  166.       SetAPen(rp, self.shadowpen)
  167.       RectFill(rp, left, top, left, bottom)
  168.       RectFill(rp, left, top, right, top)
  169.  
  170.       SetAPen(rp, self.shinepen)
  171.       RectFill(rp, right, top+1, right, bottom)
  172.       RectFill(rp, left+1, bottom, right, bottom)
  173.    ENDIF
  174.  
  175.    pixels:=IF self.horizontal THEN width-2 ELSE height-2
  176.    self.percent:=Div(Mul(self.current, 100), self.max)
  177.    lenght :=Div(Mul(self.current, pixels), self.max)
  178.  
  179.    IF ((self.oldvalue<>lenght) OR (lenght=0) OR (redraw))
  180.       top++; left++
  181.       right--; bottom--
  182.  
  183.       SetAPen(rp, self.backpen)
  184.  
  185.       IF self.horizontal
  186.          RectFill(rp, left+lenght, top, right, bottom)
  187.          SetAPen(rp, self.fillpen)
  188.          RectFill(rp, left, top, left+lenght-1, bottom)
  189.       ELSE
  190.          RectFill(rp, left, top, right, bottom-lenght)
  191.          SetAPen(rp, self.fillpen)
  192.          RectFill(rp, left, bottom-lenght+1, right, bottom)
  193.       ENDIF
  194.  
  195.       IF self.showtext
  196.          StringF(str, '\d%', self.percent)
  197.          itext:=[self.shinepen, 0, RP_JAM1, 0, 0, self.ta, str, NIL]:intuitext
  198.          texty:=top+((height-self.ta.ysize)/2)-1
  199.          textx:=left+((width-IntuiTextLength(itext))/2)-1
  200.  
  201.          itext.leftedge:=textx
  202.          itext.topedge :=texty
  203.  
  204.          PrintIText(rp, itext, 0, 0)
  205.       ENDIF
  206.  
  207.    ENDIF
  208.  
  209.    self.oldvalue:=lenght
  210.  
  211.    IF self.disabled THEN ghost(self.gh.wnd, left, top, width-1, height-1)
  212.  
  213. ENDPROC
  214. -><<
  215.  
  216. ->-- new methods ---------------------------------------------
  217.  
  218. ->>> simplegauge::set
  219. PROC set(attr, value) OF simplegauge_plugin
  220.  
  221.    SELECT attr
  222.       CASE PLA_SimpleGauge_Current
  223.          self.current:=Bounds(value, 0, self.max)
  224.          self.draw()
  225.       CASE PLA_SimpleGauge_Max
  226.          IF value>0 THEN self.max:=value
  227.          IF self.current>value THEN self.current:=value
  228.          self.draw()
  229.       CASE PLA_SimpleGauge_Disabled
  230.          self.disabled:=value
  231.          IF value=TRUE
  232.             IF self.gh<>0           /* ignore draw before gui is open */
  233.                IF self.gh.wnd<>0    /* ignore draw when window is closed */
  234.                   ghost(self.gh.wnd, self.x, self.y, self.xs-1, self.ys-1)
  235.                ENDIF
  236.             ENDIF
  237.          ELSE
  238.             self.draw(TRUE)
  239.          ENDIF
  240.       CASE PLA_SimpleGauge_BackgroundPen
  241.          IF (value>=0) AND (value<>self.backpen)
  242.             self.backpen:=value
  243.             self.draw(TRUE)
  244.          ENDIF
  245.       CASE PLA_SimpleGauge_BarPen
  246.          IF (value>=0) AND (value<>self.fillpen)
  247.             self.fillpen:=value
  248.             self.draw(TRUE)
  249.          ENDIF
  250.    ENDSELECT
  251.  
  252. ENDPROC
  253. -><<
  254.  
  255. ->>> simplegauge::get
  256. PROC get(attr) OF simplegauge_plugin
  257.  
  258.    SELECT attr
  259.       CASE PLA_SimpleGauge_Max
  260.          RETURN self.max, TRUE
  261.       CASE PLA_SimpleGauge_Current
  262.          RETURN self.current, TRUE
  263.       CASE PLA_SimpleGauge_Percent
  264.          RETURN self.percent, TRUE
  265.       CASE PLA_SimpleGauge_Horizontal
  266.          RETURN self.horizontal, TRUE
  267.       CASE PLA_SimpleGauge_Disabled
  268.          RETURN self.disabled, TRUE
  269.       CASE PLA_SimpleGauge_BackgroundPen
  270.          RETURN self.backpen, TRUE
  271.       CASE PLA_SimpleGauge_BarPen
  272.          RETURN self.fillpen, TRUE
  273.    ENDSELECT
  274.  
  275. ENDPROC -1, FALSE
  276. -><<
  277.  
  278.